/**
 *	@file	radio_trainerp.c
 *	@brief	ラジオ　トレーナープロフィールデータ生成
 *	@author	Miyuki Iwasawa
 *	@date	09.04.17
 */

#include "common.h"
#include "system/procsys.h"
#include "system/arc_util.h"
#include "system/arc_tool.h"
#include "system/bmp_list.h"
#include "system/bmp_menu.h"
#include "system/pm_str.h"
#include "system/msgdata.h"
#include "system/fontproc.h"
#include "system/snd_tool.h"
#include "system/buflen.h"
#include "system/wordset.h"
#include "system/pm_rtc.h"
#include "application/app_tool.h"
#include "msgdata/msg.naix"

#include "field/evwkdef.h"
#include "field/sysflag.h"
#include "field/sysflag_def.h"
#include "fielddata/script/saveflag.h"
#include "savedata/zukanwork.h"
#include "radio_prog.h"
#include "msgdata/msg_pg_radio.h"
#include "msgdata/msg_radio_p_trainerp.h"

#define TRAINERP_DATA_MAX	(16)
#define TOPIC_CT_MAX	(3)

typedef struct{
 int heapID;
 u16 seq;
 u8 msg_id[TOPIC_CT_MAX];
 u8	topic_ct;
}RADIO_TRAINERP_WORK;

static void trainerp_ResInit(PM_RADIO_MAN* man);
static void trainerp_ResRelease(PM_RADIO_MAN* man);
static BOOL trainerp_TopicConflictCheck(RADIO_TRAINERP_WORK* wk,u8 value, u8 max);

/**
 *	@brief	ラジオ　トレーナープロフィール　初期化
 */
int RadioTrainerP_Init(PM_RADIO_MAN* man)
{
	RADIO_TRAINERP_WORK* wk = NULL;

	wk = sys_AllocMemory(man->heapID,sizeof(RADIO_TRAINERP_WORK));
	MI_CpuClear8(wk,sizeof(RADIO_TRAINERP_WORK));

	man->ch_wk = (void*)wk;

	trainerp_ResInit(man);

	//再生開始
	Snd_BgmStop(Snd_NowBgmNoGet(),0);
	RADIO_PLAY(RADIO_BGM_TRAINERP);
	return 0;
}

/**
 *	@brief	ラジオ　トレーナープロフィール 解放
 */
int RadioTrainerP_End(PM_RADIO_MAN* man)
{
	trainerp_ResRelease(man);

	MI_CpuClear8(man->ch_wk,sizeof(RADIO_TRAINERP_WORK));
	sys_FreeMemoryEz(man->ch_wk);
	man->ch_wk = NULL;

	return 0;
}

/**
 *	@brief	ラジオ　トレーナープロフィール 再生メイン
 */
int RadioTrainerP_Play(PM_RADIO_MAN* man)
{
	RADIO_TRAINERP_WORK* wk = (RADIO_TRAINERP_WORK*)man->ch_wk;

	switch(wk->seq){
	case 0:	//トレーナープロフィールタイトルコール再生
		RadioSub_SentencePlay(man,m_trainerp_00_01);
		wk->seq++;
		break;
	case 1:
		if(!RadioSub_SentencePlayWait(man)){
			break;
		}
		wk->seq++;
	case 2:	//トピック再生
		RadioSub_SentencePlay(man,wk->msg_id[wk->topic_ct]);
		wk->seq++;
		break;
	case 3:
		if(!RadioSub_SentencePlayWait(man)){
			break;
		}
		if(++wk->topic_ct < TOPIC_CT_MAX){
			wk->seq = 2;
			break;
		}
		wk->seq++;
		break;
	case 4:
		if(!RadioSub_MsgWaitScroll(man)){
			break;
		}
		//アイキャッチ
		RadioSub_EyeCatchPlay(man,m_trainerp_00_02);
		wk->seq++;
		break;
	case 5:
		if(!RadioSub_EyeCatchPlayWait(man)){
			break;
		}
		//CMリクエスト
		man->cm_req_f = TRUE;
		return 1;
	}
	return 0;
}

/*
 *	@brief	トレーナープロフィール用 必要なデータを初期化する
 */
static void trainerp_ResInit(PM_RADIO_MAN* man)
{
	int i;
	RADIO_TRAINERP_WORK* wk = (RADIO_TRAINERP_WORK*)man->ch_wk;

	man->msg_prog = MSGMAN_Create(MSGMAN_TYPE_NORMAL,ARC_MSG,NARC_msg_radio_p_trainerp_dat,man->heapID);

	//番組タイトルとDJ名を通知
	MSGMAN_GetString(man->msg_prog,m_trainerp_title,man->str_title);
	MSGMAN_GetString(man->msg_prog,m_trainerp_dj,man->str_dj);

	//3つのトピックを抽選
	for(i = 0;i < TOPIC_CT_MAX;i++)	{
		u8 value;
		do{
			value = (gf_rand()%TRAINERP_DATA_MAX)+m_trainerp_01_01;
		}while(trainerp_TopicConflictCheck(wk,value,i));
		wk->msg_id[i] = value;
	}
}

/**
 *	@brief	トレーナープロフィール用　リソース解放
 */
static void trainerp_ResRelease(PM_RADIO_MAN* man)
{
	RADIO_TRAINERP_WORK* wk = (RADIO_TRAINERP_WORK*)man->ch_wk;

	MSGMAN_Delete(man->msg_prog);
}

/**
 *	@brief	かぶらないようにトピック抽選
 */
static BOOL trainerp_TopicConflictCheck(RADIO_TRAINERP_WORK* wk,u8 value, u8 max)
{
	int i;

	for(i = 0;i < max;i++){
		if(value == wk->msg_id[i]){
			return TRUE;
		}
	}
	return FALSE;
}